package com.atguigu.juc.day01.sleep;

/**
 * 测试目标：Thread.sleep()方法是拿着锁睡
 * 测试方式：
 *      A 线程先占用锁，得到锁之后调用 sleep()方法进入睡眠
 *      B 线程在 A 占用锁之后，申请锁，在 A 执行和睡眠期间，B 线程一直都在等待
 */
public class Demo01Sleep {

    public static void main(String[] args) throws InterruptedException {

        // 1、创建一个普通 Object 对象作为锁对象
        Object lockObj = new Object();

        // 2、创建 A 线程
        new Thread(()->{
            try {
                // 加同步锁
                synchronized (lockObj) {
                    System.out.println(Thread.currentThread().getName() + " 得到了锁。");

                    Thread.sleep(10*1000);

                    System.out.println(Thread.currentThread().getName() + " 释放了锁。");
                }
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }, "thread-a").start();

        // 3、创建 B 线程
        new Thread(()->{
            // 加同步锁
            synchronized (lockObj) {
                System.out.println(Thread.currentThread().getName() + " 得到了锁。");
            }
        }, "thread-b").start();

    }

}
